/**
 * 访问者模式：访问者模式通过将算法包含在独立的访问者类中，来对一组对象执行操作，从而分离了算法和对象结构。通过这种方式，元素的执行算法可以随着访问者改变而改变
 *
 * 示例需求：
 * 创建一个定义接受操作的 ComputerPart 接口。
 * Keyboard、Mouse、Monitor 和 Computer 是实现了 ComputerPart 接口的实体类。
 * 定义另一个接口 ComputerPartVisitor，它定义了访问者类的操作。
 * Computer 使用实体访问者来执行相应的动作。
 * 演示类SimpleMain使用 Computer、ComputerPartVisitor 类来演示访问者模式的用法。
 * 
 * 角色
 * 元素接口：ComputerPart
 * 具体元素类：Keyboard、Mouse、Monitor
 * 对象结构：Computer； ps：这个角色用于组装元素
 * 访问者接口：ComputerPartVisitor
 * 具体访问者接口：ComputerPartDisplayVisitor
 * 客户端：SimpleMain
 */
public class SimpleMain {
   public static void main(String[] args){
        Computer computer = new Computer();
        computer.addComputerPart(new Monitor());
        computer.addComputerPart(new Mouse());

        //使用visitor，后期如果想更改内部执行逻辑，直接创建新的Visitor
        computer.accept(new ComputerPartDisplayVisitor());
   }
}
